1. Field of the Invention
The present invention relates, in general, to management and allocation of resources within a computer system (i.e., “compute resources”) and to tools often referred to as workload managers or resource managers, and, more particularly, to software, hardware, systems, and methods for more effectively managing how compute resources are provided to applications, processes, and/or workloads running in a computer system and particularly in open and/or distributed systems and over multiple operating system (OS) instances.
2. Relevant Background
An ongoing problem in the computer industry is how to manage or allocate computer system or compute resources to running processes so as to more fully utilize the available system resources while providing sufficient computer system resources for application performance requirements. This is a particular problem for open systems, such as Solaris-based systems, and servers or machines are often run at low utilization, which increases the costs of operating the computer system. For example, a common response to a process, such as an e-commerce or web server application, not running at a desired speed is to buy and install more servers, memory, I/O, or other devices, e.g., to buy more equipment or compute capacity or resources. Similarly, traditional distributed systems manage resources by providing a separate server for each application being run by a customer or user. Every server is then sized for peak workloads, which typically results in very low average utilization rates for each server. There are much unused compute resources, such as central processor capacity, I/O, memory, and the like, because each application has peaks and valleys in its server or other compute resources utilization or “load.” Combining such applications or workloads is often not useful as peaks and valleys may overlap, which results in the server or compute resources being sized for an even larger peak furthering the underutilization of resources problem. Mixing workloads has become more practical recently as systems have become open and distributed and employ scalable hardware (such as CPU, memory, I/O, and the like from a pool or the like), scalable operating systems, and resource management technologies.
Numerous resource manager tools are available, but none has been totally successful in meeting the desired resource or machine utilization or the user demand for flexible controls and settings based on user input and usage. For example, resource managers are available from Microsoft Corporation, VMWare, Inc., Hewlett Packard, Sun Microsystems, Inc., IBM, and other companies, and there are also Linux-based resource management tools. Some of these tools allow the management of CPU, RAM, and I/O according to various parameters such as based on user or time of day (i.e., differing policies or operating parameters based on day time usage or night time usage). Most of these tools have undesirable limitations that have hindered their effective use in open or distributed computer systems and networks. For example, many resource management tools are specific or tied to a particular machine or physical CPU and are not useful across clusters or across multiple operating system instances. However, the primary deficiency of existing resource management tools is that they allocate resources on the basis of resource consumption, not on the basis of how much application work has been accomplished.
Some efforts have been made to implement priorities with resources being made more readily available to higher priority tasks (e.g., processes or jobs given more relative “shares” based on their importance), but such efforts have typically assigned a fixed priority to a task and have not been concerned with maintaining a desired or promised service level objective (SLO). For example, resource allocation tools exist that distribute CPU cycles based on the number of shares assigned to a project (e.g., to a group of processes or tasks grouped as a project), with the project being assigned to a pool of computer resources. Unfortunately, the meaning or value of such shares varies over time as more and more projects are assigned to the pool (e.g., the shares may become watered down as more projects and their associated shares are added to the resource pool), which often results in varying levels of service for a project over time. This can result in unpredictable and unacceptable poor service levels and makes it difficult to safely achieve reductions in cost through consolidation. The safe alternative is to acquire additional capacity, which increases costs.
While significant steps have been made in the area of compute resource management, there continues to be a need for improved methods of managing compute resources to enhance the utilization of servers and other compute resources such as CPU, network I/O, and RAM and to better serve the needs of computer system users, e.g., to better allow an administrator to set management policies or goals such as based on client requirements.